/**
 * <strong>Title : BOMDao.java<br>
 * </strong> <strong>Package : cn.b.sky.mes.cm.dao<br>
 * </strong> <strong>Description : </strong>@类注释说明写在此处@<br>
 * <strong>Create on : 2016年1月18日 上午11:48:54<br>
 * </strong>
 * <p>
 * @author dapeng.li<br>
 * @version <strong>v1.0.0</strong><br>
 * <br>
 *          <strong>修改历史:</strong><br>
 *          修改人 | 修改日期 | 修改描述<br>
 *          -------------------------------------------<br>
 * <br>
 * <br>
 */
package cn.b.sky.mes.cm.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import cn.b.sky.mes.cm.model.BOM;
import cn.b.sky.mes.cm.model.BOMComponent;
import cn.b.sky.mes.cm.model.Material;
import cn.b.sky.mes.cm.model.condition.BOMCondition;

/**
 * <strong>Title : BOMDao.java<br>
 * </strong> <strong>Package : cn.b.sky.mes.cm.dao<br>
 * </strong> <strong>Description : </strong>BOM持久层<br>
 * <strong>Create on : 2016年1月18日 上午11:48:54<br>
 * </strong>
 * <p>
 * 
 * @author dapeng.li<br>
 * @version <strong>v1.0.0</strong><br>
 * <br>
 *          <strong>修改历史:</strong><br>
 *          修改人 | 修改日期 | 修改描述<br>
 *          -------------------------------------------<br>
 * <br>
 * <br>
 */
public interface BOMDao {

  /**
   * <strong>Title : selectBOMListByCondition<br>
   * </strong> <strong>Description : </strong>条件查询BOM<br>
   * <strong>Create on : 2016年1月18日 下午1:21:43<br>
   * </strong>
   * <p>
   * 
   * @param condition
   * @return List<BOM>
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<BOM> selectBOMListByCondition(BOMCondition condition);

  /**
   * <strong>Title : updateBOM<br>
   * </strong> <strong>Description : </strong>更新BOM<br>
   * <strong>Create on : 2016年1月18日 下午1:21:54<br>
   * </strong>
   * <p>
   * 
   * @param bom
   *            void
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  void updateBOM(BOM bom);

  /**
   * <strong>Title : deleteBOM<br>
   * </strong> <strong>Description : </strong>删除BOM<br>
   * <strong>Create on : 2016年1月18日 下午1:22:10<br>
   * </strong>
   * <p>
   * 
   * @param bomCode
   * @param siteCode
   *            void
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  void deleteBOM(@Param("bomCode") String bomCode, @Param("siteCode") String siteCode);

  /**
   * <strong>Title : selectBOMCountByCondition<br>
   * </strong> <strong>Description : </strong>条件an查询BOM总数<br>
   * <strong>Create on : 2016年1月18日 下午1:22:17<br>
   * </strong>
   * <p>
   * 
   * @param condition
   * @return int
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  int selectBOMCountByCondition(BOMCondition condition);

  /**
   * <strong>Title : insertBOM<br>
   * </strong> <strong>Description : </strong>新增BOM<br>
   * <strong>Create on : 2016年1月18日 下午1:22:24<br>
   * </strong>
   * <p>
   * 
   * @param bom
   *            void
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  void insertBOM(BOM bom);

  /**
   * <strong>Title : getBOM<br>
   * </strong> <strong>Description : </strong>取BOM实体<br>
   * <strong>Create on : 2016年1月18日 下午1:29:05<br>
   * </strong>
   * <p>
   * 
   * @param bomCode
   * @param siteCode
   * @return BOM
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  BOM getBOM(@Param("bomCode") String bomCode, @Param("siteCode") String siteCode);

  /**
   * <strong>Title : selectMaterialByBomCode<br>
   * </strong> <strong>Description : </strong>取所有挂当前物料清单的物料<br>
   * <strong>Create on : 2016年1月19日 下午2:34:48<br>
   * </strong>
   * <p>
   * 
   * @param bomCode
   * @param siteCode
   * @return List<String>
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Material> selectMaterialByBomCode(@Param("bomCode") String bomCode, @Param("siteCode") String siteCode);

  /**
   * <strong>Title : selectMaterialByComponentCode<br>
   * </strong> <strong>Description : </strong>根据组件编号查找引用的物料<br>
   * <strong>Create on : 2016年1月19日 下午3:00:58<br>
   * </strong>
   * <p>
   * 
   * @param materialCode
   * @param siteCode
   * @return List<Material>
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Material> selectMaterialByComponentCode(@Param("materialCode") String materialCode,
      @Param("siteCode") String siteCode);

  /**
   * <strong>Title : selectComponentsWithItsBomCode<br>
   * </strong> <strong>Description :
   * </strong>根据bomCode取组件编号，组件描述及该组件下对应bomCode（如果存在）<br>
   * <strong>Create on : 2016年1月20日 上午9:49:21<br>
   * </strong>
   * <p>
   * 
   * @param bomCode
   * @param siteCode
   * @return List<BOMComponent>
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<BOMComponent> selectComponentsAndItsBomCode(@Param("bomCode") String bomCode, @Param("siteCode") String siteCode);
  
  /**
   * 
   * <strong>Title : selectParentsComponents<br></strong>
   * <strong>Description : </strong>查询父组件清单<br> 
   * <strong>Create on : 2016年5月16日 上午9:39:39<br></strong>
   * <p>
   * @param componentCode
   * @param siteCode
   * @return
   * List<BOMComponent>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<BOMComponent> selectParentsComponents(@Param("componentCode") String componentCode, @Param("siteCode") String siteCode);

  /**
   * 
   * <strong>Title : selectBOMSuggests<br>
   * </strong> <strong>Description : </strong>bom搜索建议<br>
   * <strong>Create on : 2016年4月11日 下午7:26:31<br>
   * </strong>
   * <p>
   * 
   * @param condition
   * @return List<BOM>
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<BOM> selectBOMSuggests(BOMCondition condition);

}
